//
// Created by 颖滴哦 on 2023/3/5.
//
/*
 * 1.使用pipe创建管道。
 * 2.使用fork创建子级。
 * 3.使用read从管道读取，使用write向管道写入。
 * 4.使用getpid查找调用进程的进程ID。
 * 5.xv6上的用户程序可使用的库函数集有限。您可以在user/user.h中看到列表；源（系统调用除外）位于user/ulib.c、user/printf.c和user/umalloc.c中。
 */
#include "kernel/types.h"
#include "user/user.h"
int
main()
{
//    printf("pingpang.....\n");
//    int ctp[2],ptc[2];
//    char buf[100];
//    pipe(ptc);
//    pipe(ctp);
//    if(fork()==0){
//        read(ptc[0],buf,sizeof(buf));
//        printf("%d: received %s\n",getpid(),buf);
//
//        write(ctp[1],"ping",4);
//        exit(0);
//
//    } else{
//        write(ptc[1],"pong",4);
//
//        read(ctp[0],buf,sizeof(buf));
//        printf("%d: received %s\n",getpid(),buf);
//    }
//    exit(0);

    printf("pingpang.....\n");
    int p[2];
    char buf[100];
    pipe(p);
    if(fork()==0){
        write(p[1],"ping",4);

        read(p[0],buf,sizeof(buf));
        printf("%d: received %s\n",getpid(),buf);
    } else{
        read(p[0],buf,sizeof(buf));
        printf("%d: received %s\n",getpid(),buf);

        write(p[1],"pong",4);
        wait(0);
    }
    exit(0);
}